#ifndef __PID_H
#define __PID_H

typedef struct PID_t {
	float kp;
	float ki;
	float kd;
	float last_input;
	float target;
	float dt;
	float i;
	float i_max;
	float i_min;
	float out_max;
	float out_min;
} PID_t;

void PID_Init(PID_t *pid, float kp, float ki, float kd, float dt);
void PID_SetTarget(PID_t *pid, float target);
void PID_SetIntegralLimit(PID_t* pid, float i_max, float i_min);
void PID_SetOutputLimit(PID_t* pid, float out_max, float out_min);
float PID_Calc(PID_t *pid, float input);
#endif